package com.sugar.psych.assessment.module.business.service.userpsychassessmentrecord;

import java.util.*;
import javax.validation.*;
import com.sugar.psych.assessment.module.business.controller.admin.userpsychassessmentrecord.vo.*;
import com.sugar.psych.assessment.module.business.controller.app.userpsychassessmentrecord.vo.AppNeedAnswerRespVO;
import com.sugar.psych.assessment.module.business.controller.app.userpsychassessmentrecord.vo.AppUserPsychAssessmentRecordDetailRespVO;
import com.sugar.psych.assessment.module.business.controller.app.userpsychassessmentrecord.vo.AppUserPsychAssessmentRecordSimpleRespVO;
import com.sugar.psych.assessment.module.business.controller.app.userpsychassessmentrecord.vo.UserAnswerQuestionReqVO;
import com.sugar.psych.assessment.module.business.dal.dataobject.userpsychassessmentrecord.UserPsychAssessmentRecordDO;
import com.sugar.psych.assessment.framework.common.pojo.PageResult;
import com.sugar.psych.assessment.framework.common.pojo.PageParam;
import com.sugar.psych.assessment.module.business.dal.dataobject.userpsychassessmentrecord.UserPsychQuestionRecordDO;

/**
 * 用户心理测评记录 Service 接口
 *
 * @author Ysugar
 */
public interface UserPsychAssessmentRecordService {

    /**
     * 创建用户心理测评记录
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createUserPsychAssessmentRecord(@Valid UserPsychAssessmentRecordSaveReqVO createReqVO);

    /**
     * 更新用户心理测评记录
     *
     * @param updateReqVO 更新信息
     */
    void updateUserPsychAssessmentRecord(@Valid UserPsychAssessmentRecordSaveReqVO updateReqVO);

    /**
     * 删除用户心理测评记录
     *
     * @param id 编号
     */
    void deleteUserPsychAssessmentRecord(Long id);

    /**
    * 批量删除用户心理测评记录
    *
    * @param ids 编号
    */
    void deleteUserPsychAssessmentRecordListByIds(List<Long> ids);

    /**
     * 获得用户心理测评记录
     *
     * @param id 编号
     * @return 用户心理测评记录
     */
    UserPsychAssessmentRecordDO getUserPsychAssessmentRecord(Long id);

    /**
     * 获得用户心理测评记录分页
     *
     * @param pageReqVO 分页查询
     * @return 用户心理测评记录分页
     */
    PageResult<UserPsychAssessmentRecordDO> getUserPsychAssessmentRecordPage(UserPsychAssessmentRecordPageReqVO pageReqVO);

    // ==================== 子表（用户心理测评题目表） ====================

    /**
     * 获得用户心理测评题目表分页
     *
     * @param pageReqVO 分页查询
     * @param recordId 测评记录编号
     * @return 用户心理测评题目表分页
     */
    PageResult<UserPsychQuestionRecordDO> getUserPsychQuestionRecordPage(PageParam pageReqVO, Long recordId);

    /**
     * 创建用户心理测评题目表
     *
     * @param userPsychQuestionRecord 创建信息
     * @return 编号
     */
    Long createUserPsychQuestionRecord(@Valid UserPsychQuestionRecordDO userPsychQuestionRecord);

    /**
     * 更新用户心理测评题目表
     *
     * @param userPsychQuestionRecord 更新信息
     */
    void updateUserPsychQuestionRecord(@Valid UserPsychQuestionRecordDO userPsychQuestionRecord);

    /**
     * 删除用户心理测评题目表
     *
     * @param id 编号
     */
    void deleteUserPsychQuestionRecord(Long id);

    /**
    * 批量删除用户心理测评题目表
    *
    * @param ids 编号
    */
    void deleteUserPsychQuestionRecordListByIds(List<Long> ids);

	/**
	 * 获得用户心理测评题目表
	 *
	 * @param id 编号
     * @return 用户心理测评题目表
	 */
    UserPsychQuestionRecordDO getUserPsychQuestionRecord(Long id);

    Long appUserCreate(Long loginUserId);

    Long userAnswerQuestion(UserAnswerQuestionReqVO answerReqVO, Long loginUserId);

    PageResult<AppUserPsychAssessmentRecordSimpleRespVO> appGetRecordPage(PageParam pageParam, Long loginUserId);

    AppUserPsychAssessmentRecordDetailRespVO appGetUserPsychAssessmentRecord(Long id, Long loginUserId);

    AppNeedAnswerRespVO needAnswer(Long loginUserId);

    Long restart(Long loginUserId);

    Long restartUnfinished(Long loginUserId);
}